package cn.tedu.csmall.passport.controller;

import cn.tedu.csmall.passport.pojo.dto.AdminAddNewDTO;
import cn.tedu.csmall.passport.pojo.vo.AdminListItemVO;
import cn.tedu.csmall.passport.pojo.vo.RoleListItemVO;
import cn.tedu.csmall.passport.service.IAdminService;
import cn.tedu.csmall.passport.service.IRoleService;
import cn.tedu.csmall.passport.web.JsonResult;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.Range;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 处理角色相关请求的控制器
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Slf4j
@Validated
@RestController
@RequestMapping("/roles")
@Api(tags = "02. 角色管理模块")
public class RoleController {

    @Autowired
    private IRoleService roleService;

    public RoleController() {
        log.debug("创建控制器对象：RoleController");
    }

//    // http://localhost:9081/admins/add-new?name=管理员001&description=管理员001的简介&sort=199
//    @ApiOperation("添加管理员")
//    @ApiOperationSupport(order = 100)
//    @PostMapping("/add-new")
//    public JsonResult<Void> addNew(@Valid AdminAddNewDTO adminAddNewDTO) {
//        log.debug("开始处理【添加管理员】的请求，参数：{}", adminAddNewDTO);
//        adminService.addNew(adminAddNewDTO);
//        log.debug("添加管理员成功！");
//        return JsonResult.ok();
//    }
//
//    // http://localhost:9081/admins/9527/enable
//    @ApiOperation("启用管理员")
//    @ApiOperationSupport(order = 200)
//    @ApiImplicitParam(name = "id", value = "管理员id", required = true, dataType = "long")
//    @PostMapping("/{id:[0-9]+}/enable")
//    public JsonResult<Void> setEnable(@Range(min = 1, message = "启用管理员失败，尝试启用的管理员的ID无效！")
//                                   @PathVariable Long id) {
//        log.debug("开始处理【启用管理员】的请求，参数：{}", id);
//        adminService.setEnable(id);
//        return JsonResult.ok();
//    }
//
//    // http://localhost:9081/admins/9527/disable
//    @ApiOperation("禁用管理员")
//    @ApiOperationSupport(order = 311)
//    @ApiImplicitParam(name = "id", value = "管理员id", required = true, dataType = "long")
//    @PostMapping("/{id:[0-9]+}/disable")
//    public JsonResult<Void> setDisable(@Range(min = 1, message = "启用管理员失败，尝试启用的管理员的ID无效！")
//                                      @PathVariable Long id) {
//        log.debug("开始处理【禁用管理员】的请求，参数：{}", id);
//        adminService.setDisable(id);
//        return JsonResult.ok();
//    }
//
//
//    // http://localhost:9081/admins/9527/delete
//    @ApiOperation("根据id删除管理员")
//    @ApiOperationSupport(order = 200)
//    @ApiImplicitParam(name = "id", value = "管理员id", required = true, dataType = "long")
//    @PostMapping("/{id:[0-9]+}/delete")
//    public JsonResult<Void> delete(@Range(min = 1, message = "删除管理员失败，尝试删除的管理员的ID无效！")
//                             @PathVariable Long id) {
//        log.debug("开始处理【根据id删除管理员】的请求，参数：{}", id);
//        adminService.delete(id);
//        return JsonResult.ok();
//    }

     //http://localhost:9081/roles
    @ApiOperation("查询角色列表")
    @ApiOperationSupport(order = 420)
    @GetMapping("")
    public JsonResult<List<RoleListItemVO>> list() {
        log.debug("开始处理【查询角色列表】的请求，无参数");
        List<RoleListItemVO> list = roleService.list();
        return JsonResult.ok(list);
    }
//
//    // http://localhost:9081/albums/hello/delete
//    @ApiOperation("【已过期】根据名称删除管理员")
//    @ApiOperationSupport(order = 901)
//    @PostMapping("/{name:[a-z]+}/delete")
//    public String delete2(@PathVariable String name) {
//        String message = "尝试删除名称值为【" + name + "】的管理员";
//        log.debug(message);
//        return message;
//    }
//
//    // http://localhost:9081/albums/test/delete
//    @ApiOperation("【已过期】测试删除管理员")
//    @ApiOperationSupport(order = 902)
//    @PostMapping("/test/delete")
//    public String delete3() {
//        String message = "尝试测试删除管理员";
//        log.debug(message);
//        return message;
//    }

}
